﻿using System;
using System.Collections.Generic;

namespace GPainter
{
    /// <summary>
    /// служит для регистрации и разрешения типов данных вершин и их представлений
    /// </summary>
    public static class NodeDataViewManager
    {
        /// <summary>
        /// репозиторий типов
        /// </summary>
        private static readonly Dictionary<string, Type> TypesRepository = new Dictionary<string, Type>();

        /// <summary>
        /// зарегистрировать тип вершины
        /// </summary>
        /// <param name="dataType">тип данных, описывающий вершину</param>
        /// <param name="viewType">тип представления, описывающий вершину</param>
        public static void ResisterNode(Type dataType, Type viewType)
        {
            RegisterNode("",dataType,viewType);
        }

        /// <summary>
        /// зарегистрировать тип вершины
        /// </summary>
        /// <param name="nodeTypeName">имя типа вершины</param>
        /// <param name="dataType">тип данных, описывающий вершину</param>
        /// <param name="viewType">тип представления, описывающий вершину</param>
        public static void RegisterNode(string nodeTypeName, Type dataType, Type viewType)
        {
            TypesRepository.Add(nodeTypeName+dataType.FullName,viewType);
        }

        /// <summary>
        /// получить тип представления по типу вершины
        /// </summary>
        /// <param name="nodeTypeName"></param>
        /// <param name="dataType"></param>
        /// <returns></returns>
        public static Type ResolveNodeView(string nodeTypeName, Type dataType)
        {
            return TypesRepository[nodeTypeName + dataType.FullName];
        }

        public static Type ResolveNodeView(Type dataType)
        {
            return ResolveNodeView("", dataType);
        }
    }
}
